#ifndef MATRIX_H_
#define MATRIX_H_

#include "Header.h"

class Matrix
{
public:
    float value[16];

    // create a default matrix
    Matrix();

	// reset a matrix
    void Reset();

	// print value
    void Print();

    // multiply a matrix
    void Multiply(const Matrix &a);

    // add a matrix
    void Add(const Matrix &a);

    // rotate a transform matrix around x
    void RotateX(float alpha);

    // rotate a transform matrix around y
    void RotateY(float alpha);

    // rotate a transform matrix around z
    void RotateZ(float alpha);

    // translate a transform matrix
    void Translate(float x, float y, float z);

    // scale a transform matrix 
    void Scale(float x, float y, float z);
  
    // get OrthGraphics
    void LoadOrthoGraphics(float left, float right, float bottom, float top, float near, float far);

    // set Perfective
    void LoadPerperstive(float fovy, float aspect, float zNear, float zFar);

    // multiply equal operator
    Matrix &operator*=(const Matrix &matrix);

    // multiply operator
    Matrix operator*(const Matrix &matrix);

    // plus operator
    Matrix operator+(const Matrix &matrix);
};

#endif

